package 力扣.中等;
/**
 * 给你一个数组 nums ，它包含 n 个正整数。你需要计算所有非空连续子数组的和，并将它们按升序排序，得到一个新的包含 n * (n + 1) / 2 个数字的数组。
 *
 * 请你返回在新数组中下标为 left 到 right （下标从 1 开始）的所有数字和（包括左右端点）。由于答案可能很大，请你将它对 10^9 + 7 取模后返回。
 *
 *  
 *
 * 示例 1：
 *
 * 输入：nums = [1,2,3,4], n = 4, left = 1, right = 5
 * 输出：13
 * 解释：所有的子数组和为 1, 3, 6, 10, 2, 5, 9, 3, 7, 4 。将它们升序排序后，我们得到新的数组 [1, 2, 3, 3, 4, 5, 6, 7, 9, 10] 。下标从 le = 1 到 ri = 5 的和为 1 + 2 + 3 + 3 + 4 = 13 。
 *
 * 思路：难点就是数组所有元素的排列组合
 *   for(int i=0;i<nums.length;i++){
 *             int map=0;
 *             for(int j=i;j<nums.length;j++){
 *                 map+=nums[j];
 *                 list.add(map);
 *             }
 *         }
 * */
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;



public class 字数组排序后的区间和 {
    public static void main(String[] args) {
        ArrayList<Integer> arrayList=new ArrayList();
        int[] nums={1,2,3,4};
        int left=3;
        int right=4;
        for(int i=0;i<nums.length;i++){

            int temp=nums[i];
            arrayList.add(nums[i]);
            for(int j=i+1;j<nums.length;j++){
                temp+=nums[j];
                arrayList.add(temp);
            }
        }
        arrayList.sort(Comparator.naturalOrder());
        String string = arrayList.toString();
        int sum=0;
        for(int i=left-1;i<right;i++){
            int o = arrayList.get(i);
            sum+=o;
        }
        Object[] objects = arrayList.toArray();
        System.out.println(Arrays.toString(objects));
        System.out.println(string);
        System.out.println(sum);


    }
}
